package Main;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.Scanner;

/**
 * 
 * @author Fagner fjas
 * Cria um menu baseado nos ítens adicionados usuário
 * faz a leitura da opção escolhida e grava em um inteiro.
 */

public class Menu {
	
	private String Titulo;
	private String Prompt;
	
	public int OptionSair;
	public int Option;
	
	private LinkedList<String> Itens;
	private static Scanner input;
	
	/**
	 * Construtor
	 * @param Titulo
	 * @param Prompt
	 */
	public Menu(String Titulo, String Prompt, int OptionSair ) {
		this.Titulo = Titulo;
		this.Prompt = Prompt;
		this.OptionSair = OptionSair;
		Itens = new LinkedList<String>();
		input = new Scanner( System.in );
	}
	
	/**
	 * Adiciona os ítens no menu.
	 * @param item
	 */
	public void addItem( String item){
		Itens.add( item);
	}
	
	/**
	 * Pronpt para o usuário
	 * @return
	 */
	public String getPrompt(){
		return Prompt;
	}
	
	/**
	 * Retorna o Título do menu
	 * @return
	 */
	public String getTitulo(){
		return Titulo;
	}

	/**
	 * Retorna a lista dos ítens do menu
	 * @return
	 */
	public LinkedList<String> getLista(){
		return Itens;
	}
	
	/**
	 * 
	 * @throws Exception
	 */
	public void printMenu() throws Exception{
		System.out.println( getTitulo() + "\n");
		
		if( Itens.size() < 1 ){
			throw new Exception( "Lista de ítens do menu está vazia!!!" );
		}else{
			Iterator<String> ItenIterado = Itens.iterator();
			while( ItenIterado.hasNext() ){
				System.out.println( ItenIterado.next() );
			}
			System.out.println( "\n");
			System.out.println( "Digite " + OptionSair + " para sair! ");
			Option = lerOpcaoInteiro( getPrompt(), Itens.size() );
		
		}
	}
	
	public static int lerOpcaoInteiro(String messagemPrompt, int nMaximoOpcoes) {
		while(true){
			try{
				System.out.print(messagemPrompt);
				Integer number = 0;
				do {
					number = Integer.valueOf( input.nextLine() );
				}while(number < 0 || number > nMaximoOpcoes);
				return number;
			}catch (NumberFormatException nfe) {
				// Just to avoid crashing in the user's face.
			}
		}
	}
}